home *** CD-ROM | disk | FTP | other *** search
/ DS-CD ROM 2 1993 August / DS CD-ROM 2.Ausgabe (August 1993).iso / programm / ds0257 / demo.exe / ENV.DEM < prev    next >
Text File  |  1992-02-16  |  15KB  |  500 lines

  1. ; ----------------------------
  2. ; ENV.DEM      - Demoprogramm für die Routinen aus ENV.LIB
  3. ;                (für den A86)
  4. ;
  5. ;                (c) Bernd Schemmer 1990 - 1992
  6. ;                Letzter Update: 15.02.1992
  7. ;
  8. ; Übersetzen:
  9. ;  A86 ENV.DEM DEMOS.INC TO ENV.COM
  10. ;
  11. ; Hinweis: Die Environment-Variable 'A86' muß den Dateinamen 'MACROS.MAC'
  12. ;          enthalten und die .LIB-Dateien müssen über die Datei A86.LIB
  13. ;          erreichbar sein.
  14. ;
  15. ; ---------------------------
  16.          jmp start            ; Daten überspringen
  17.  
  18. ; ---------------------------
  19. ; Meldungen
  20. ;
  21. logo      db CR,LF
  22.           db 'ENV.DEM - Demoprogramm für die Routinen aus ENV.LIB'
  23.           db CR,LF
  24.           db '---------------------------------------------------'
  25.           db CR,LF,CR,LF
  26. GETLENGTH logo
  27.  
  28.                               ; Meldung, falls das Programm vom COMMAND.COM
  29.                               ; aufgerufen wurde
  30. MakeMsg1 _CommandMsg, '(Kommando-Interpreter)'
  31.  
  32. MakeMsg _ReleaseEnv,  CR,LF, 'Gebe lokales Environment frei.'
  33. MakeMsg _ComspecMSG,  CR,LF, 'Ermittle den Wert von COMSPEC im akt. Environment'
  34.  
  35. ; ---------------------------
  36. ; Maske für die Daten des lokalen Environments
  37. ;
  38. _LokalEnvMSG   db 'Daten des lokalen Environments:'
  39.                db CR,LF
  40.                db '-------------------------------'
  41.                db CR,LF
  42.                db '(Segment-Adresse: '
  43. _LokalEnvSeg    db '????h, Länge: '
  44. _LokalEnvLength db '?????, Belegt: '
  45. _LokalEnvUsed   db '?????, Frei: '
  46. _LokalEnvFree   db '?????)'
  47.                db CR,LF
  48.                db '---- Der Programm-Name ist: '
  49. _ProgName      db 65 dup ' '
  50.                db CR,LF
  51.                db '---- Anzahl Einträge im Environment: '
  52. _LokalEnvCount db '???'
  53.                db CR,LF
  54.                db '---- Einträge: '
  55.                db CR,LF
  56. GETLENGTH _LokalEnvMSG
  57.  
  58. ; ---------------------------
  59. ; Maske für die Daten des Environments des aufrufenden Programmes
  60. ;
  61. _CallerEnvMSG  db CR,LF
  62.                db 'Daten des Environments des aufrufenden Programmes:'
  63.                db CR,LF
  64.                db '--------------------------------------------------'
  65.                db CR,LF
  66.                db '(Segment-Adresse: '
  67. _CallerEnvSeg    db '????h, Länge: '
  68. _CallerEnvLength db '?????, Belegt: '
  69. _CallerEnvUsed   db '?????, Frei: '
  70. _CallerEnvFree   db '?????)'
  71.                db CR,LF
  72.                db '---- Der Name des aufrufenden Programmes ist: '
  73. _CallerName    db 80 dup ' '
  74.                db CR,LF
  75.                db '---- Anzahl Einträge im Environment: '
  76. _CallerEnvCount db '???'
  77.                db CR,LF
  78.                db '---- Einträge: '
  79.                db CR,LF
  80. GETLENGTH _CallerEnvMSG
  81.  
  82. ; ---------------------------
  83. ; Maske für die Daten des Master-Environments des COMMAND.COM
  84. ;
  85. _CommandEnvMSG db CR,LF
  86.                db 'Daten des Master-Environments des Kommando-Interpreters:'
  87.                db CR,LF
  88.                db '--------------------------------------------------------'
  89.                db CR,LF
  90.                db '(Segment-Adresse: '
  91. _CommandEnvSeg    db '????h, Länge: '
  92. _CommandEnvLength db '?????, Belegt: '
  93. _CommandEnvUsed   db '?????, Frei: '
  94. _CommandEnvFree   db '?????)'
  95.                db CR,LF
  96.                db '---- Anzahl Einträge im Environment: '
  97. _CommandEnvCount db '???'
  98.                db CR,LF
  99.                db '---- Einträge: '
  100.                db CR,LF
  101. GETLENGTH _CommandEnvMSG
  102.  
  103. ; ---------------------------
  104. ; Fehlermeldungen
  105. ;
  106. MakeMsg _LokalError,   'Fehler: Daten des lokalen Environments nicht ermittelbar!'
  107. MakeMsg _CallerError,  'Fehler: Daten des Environments des Aufrufers nicht ermittelbar!'
  108. MakeMsg _CommandError, 'Fehler: Daten des Master-Environments des COMMAND.COM nicht ermittelbar!'
  109. MakeMsg _ReleaseError, 'Fehler: Lokales Environment konnte nicht freigegeben werden!'
  110. MakeMsg _ComspecError, 'Fehler: Inhalt von COMSPEC nicht ermittelbar!'
  111.  
  112. ; ---------------------------
  113. ; Variablen
  114.  
  115. _Comspec  db 7,'COMSPEC'      ; Name der Variable
  116.           db ' = '            ; (für die Ausgabe)
  117. _ComspecPuffer db 65 dup ' '  ; Puffer für den Inhalt der Variable
  118.  
  119. enventry db 256 dup 0         ; Puffer für einen Eintrag aus dem Environment
  120.  
  121. ; ----------------------------
  122. start:
  123.          call ShowLogo        ; Logo ausgeben und Speicherblock verkleinern
  124.  
  125.          TestDOSVersion 3,0   ; DOS-Version überprüfen
  126.  
  127.          call EnvCount        ; Routinen und Tabellen initialisieren
  128.  
  129.          call ShowLokalEnvironment
  130.          call ShowPause
  131.          jc >l9
  132.  
  133.          call ShowCallerEnvironment
  134.          call ShowPause
  135.          jc >l9
  136.  
  137.          call ShowCommandEnvironment
  138.          call ShowPause
  139.          jc >l9
  140.  
  141.          call CheckSetRoutine
  142.          jc >l9
  143.          call ShowPause
  144.          jc >l9
  145.  
  146.          call ReleaseLokalEnv
  147.  
  148. l9:
  149.          EndProcess 0
  150.  
  151. ; ------------------
  152. ; CheckSetRoutine
  153. ;
  154. ; Funktion: Demonstriert die Routine SetEnvVar
  155. ;
  156. OldVar     db 7,'COMSPEC'     ; Name der Variable die gelöscht wird
  157. LeerString db 0               ; Dummystring zum Löschen einer Variable
  158.  
  159. ChangeVar  db 4,'PATH'        ; Name der Variablen die geändert wird
  160. NewPath    db 8,'Testpfad'    ; Neuer Inhalt für die geänderte Variable
  161.  
  162. NewVar1    db 4,'TEST'        ; Name der Variable die erstellt werden soll
  163. NewVarInh1 db 12,'abcdefghijkl'; Inhalt der neuen Variable
  164.  
  165. NewVar2    db 5,'Test1'       ; Name der neuen Variable
  166. NewVarInh2 db 4,'abcd'        ; Inhalt der neuen Variable
  167.  
  168.  
  169. CheckMSG0 db CR,LF
  170.           db 'Erstelle die Variable "TEST" im lokalen Environment mit dem '
  171.           db 'Inhalt abcdefghijkl'
  172.           db CR,LF
  173.           db '(Sollte eigentlich nicht gehen, da der Eintrag mehr als 16 Byte lang ist!)'
  174.           db CR,LF
  175. GETLENGTH CheckMSG0
  176.  
  177. MakeMsg CheckMSG1, CR,LF, 'Lösche die Variable "COMSPEC" im lokalen Environment'
  178.  
  179. CheckMSG2 db CR,LF
  180.           db 'Erstelle die Variable "TEST1" im lokalen Environment mit dem '
  181.           db 'Inhalt abcd'
  182.           db CR,LF
  183.           db '(muß nun möglich sein!)'
  184.           db CR,LF
  185.           db CR,LF
  186. GETLENGTH CheckMSG2
  187.  
  188. MakeMsg CheckMSG3,  CR,LF, 'Setze die Variable "PATH" im lokalen Environment auf "Testpfad"'
  189. MakeMsg CheckError1,       'Fehler: Variable "TEST" konnte nicht erstellt werden!'
  190. MakeMsg CheckError2,       'Fehler: Variable "COMSPEC" konnte nicht gelöscht werden!'
  191. MakeMsg CheckError3,       'Fehler: Variable "TEST1" konnte nicht erstellt werden!'
  192. MakeMsg CheckError4,       'Fehler: Variable "PATH" kann nicht geändert werden!'
  193.  
  194. CheckSetRoutine:
  195.          mov al,0             ; auf lokales Environment umschalten
  196.          call UseOtherEnv
  197.          jnc >l1
  198.                               ; Fehler: lokales Environment nicht nutzbar
  199.          WRITE_STRING _lokalError
  200.          ret
  201.  
  202. l1:
  203.          WRITE_STRING CheckMSG0
  204.  
  205.                               ; Erstellen der Variable TEST
  206.          mov si,offset NewVar1
  207.          mov di,offset NewVarInh1
  208.          call SetEnvVar
  209.          jnc >l1
  210.                               ; Fehler beim Erstellen
  211.          WRITE_STRING CheckError1
  212.  
  213. l1:
  214.          WRITE_STRING CheckMSG1
  215.                               ; Löschen der Variable COMSPEC
  216.          mov si,offset OldVar
  217.          mov di,offset LeerString
  218.          call SetEnvVar
  219.          jnc >l1
  220.                               ; Fehler beim Löschen
  221.          WRITE_STRING CheckError2
  222.  
  223. l1:
  224.          WRITE_STRING CheckMsg3
  225.                               ; Ändern der Variable PATH
  226.          mov si,offset ChangeVar
  227.          mov di,offset NewPath
  228.          call SetEnvVar
  229.          jnc >l1
  230.                               ; Fehler beim Ändern der Variable
  231.          WRITE_STRING CheckError4
  232. l1:
  233.          WRITE_STRING CheckMSG2
  234.                               ; Erstellen der Variable TEST1
  235.          mov si,offset NewVar2
  236.          mov di,offset NewVarInh2
  237.          call SetEnvVar
  238.          jnc >l1
  239.                               ; Fehler beim Erstellen
  240.          WRITE_STRING CheckError3
  241. l1:
  242.          call ShowPause
  243.          jc >l9
  244.                               ; und nochmal das lokale Environment anzeigen
  245.          call ShowLokalEnvironment
  246.          clc
  247. l9:
  248.          ret
  249.  
  250. ; ------------------
  251. ; RelelaseLokalEnv
  252. ;
  253. ; Funktion: Freigabe des lokalen Environments
  254. ;
  255. ReleaseLokalEnv:              ; lokales Environment freigeben
  256.          WRITE_STRING _releaseEnv
  257.          call FreeLokalEnv
  258.          jnc >l1
  259.                               ; Fehler: Environment konnte nicht freigegeben
  260.                               ;         werden
  261.          WRITE_STRING _releaseError
  262. l1:
  263.          ret
  264.  
  265. ; ----------------------------
  266. ; ShowLokalEnvironment
  267. ;
  268. ; Funktion: Ausgabe der Daten des lokalen Environments
  269. ;
  270. ShowLokalEnvironment:
  271.          mov al,0             ; auf lokales Environment umschalten
  272.          call UseOtherEnv
  273.          jnc >l1
  274.                               ; Fehler: lokales Environment nicht nutzbar
  275.          WRITE_STRING _lokalError
  276.          jmp ret
  277.  
  278. l1:                           ; Daten des lokalen Environments ausgeben
  279.  
  280.          call EnvCount        ; Anzahl Einträge eintragen
  281.          mov di,offset _lokalEnvCount
  282.          call Konvert_AL_To_Dezstring
  283.  
  284.                               ; Segment-Adresse eintragen
  285.          mov di,offset _LokalEnvSeg
  286.          mov ax,w LokalEnvSeg
  287.          call Konvert_AX_To_Hexstring
  288.  
  289.                               ; Daten eintragen
  290.          call GetEnvData
  291.          jc >l1
  292.  
  293.          push bx
  294.          push cx
  295.          mov di,offset _LokalEnvLength
  296.          call Konvert_AX_To_Dezstring
  297.          pop ax
  298.          mov di,offset _LokalEnvFree
  299.          call Konvert_AX_To_Dezstring
  300.          pop ax
  301.          mov di,offset _LokalEnvUsed
  302.          call Konvert_AX_To_Dezstring
  303. l1:
  304.                               ; Programm-Name ermitteln
  305.          mov di,offset _progname-1
  306.          push w[di]
  307.          call GetProgName
  308.          pop ax
  309.          mov [di],al
  310.  
  311.                               ; Statistik ausgeben
  312.          WRITE_STRING _LokalEnvMSG
  313.  
  314.          call ShowEntrys      ; Einträge ausgeben
  315.  
  316.          call ShowCOMSPEC     ; Ausgabe des Inhaltes von COMSPEC in diesem
  317.                               ; Environment
  318. l9:
  319.          ret
  320.  
  321. ; ----------------------------
  322. ; ShowCallerEnvironment
  323. ;
  324. ; Funktion: Ausgabe der Daten des Environments des Aufrufers
  325. ;
  326. ShowCallerEnvironment:
  327.          mov al,1             ; auf Environment des Aufrufers umschalten
  328.          call UseOtherEnv
  329.          jnc >l1
  330.                               ; Fehler: Environment nicht nutzbar
  331.          WRITE_STRING _callerError
  332.          jmp >l9
  333.  
  334. l1:                           ; Daten des Environments ausgeben
  335.  
  336.          call EnvCount        ; Anzahl Einträge eintragen
  337.          mov di,offset _callerEnvCount
  338.          call Konvert_AL_To_Dezstring
  339.  
  340.                               ; Segment-Adresse eintragen
  341.          mov di,offset _callerEnvSeg
  342.          mov ax,w CallerEnvSeg
  343.          call Konvert_AX_To_Hexstring
  344.  
  345.                               ; Daten eintragen
  346.          call GetEnvData
  347.          jc >l1
  348.          push bx
  349.          push cx
  350.          mov di,offset _CallerEnvLength
  351.          call Konvert_AX_To_Dezstring
  352.          pop ax
  353.          mov di,offset _CallerEnvFree
  354.          call Konvert_AX_To_Dezstring
  355.          pop ax
  356.          mov di,offset _CallerEnvUsed
  357.          call Konvert_AX_To_Dezstring
  358. l1:
  359.                               ; Name des Aufrufers ermitteln
  360.          mov di,offset _callerName-1
  361.  
  362.          mov al,[di]          ; Längenzähler wird hier nicht gebraucht
  363.          push ax
  364.          call GetCallerName
  365.          pop ax
  366.          mov [di],al
  367.          jc >l1               ; Fehler
  368.          jnz >l1              ; Name eingetragen, okay
  369.                               ; Name nicht ermittelbar
  370.          inc di
  371.          mov si,offset _CommandMSG
  372.          mov cx,_CommandMSG_LENGTH
  373.          cld
  374.          rep movsb
  375.  
  376. l1:                           ; Statistik ausgeben
  377.          WRITE_STRING _callerEnvMSG
  378.  
  379.          call ShowEntrys      ; Einträge ausgeben
  380.          call ShowCOMSPEC     ; Ausgabe des Inhaltes von COMSPEC in diesem
  381.                               ; Environment
  382. l9:
  383.          ret
  384.  
  385. ; ----------------------------
  386. ; ShowCommandEnvironment
  387. ;
  388. ; Funktion: Ausgabe der Daten des Environment des COMMAND.COM
  389. ;
  390. ShowCommandEnvironment:
  391.          mov al,2             ; auf Environment des COMMAND.COM umschalten
  392.          call UseOtherEnv
  393.          jnc >l1
  394.                               ; Fehler: Environment nicht nutzbar
  395.          WRITE_STRING _commandError
  396.          jmp >l9
  397.  
  398. l1:                           ; Daten des Environments ausgeben
  399.  
  400.          call EnvCount        ; Anzahl Einträge eintragen
  401.          mov di,offset _commandEnvCount
  402.          call Konvert_AL_To_Dezstring
  403.  
  404.                               ; Segment-Adresse eintragen
  405.          mov di,offset _commandEnvSeg
  406.          mov ax,w CommandEnvSeg
  407.          call Konvert_AX_To_Hexstring
  408.  
  409.                               ; Daten eintragen
  410.          call GetEnvData
  411.          jc >l1
  412.  
  413.          push bx
  414.          push cx
  415.          mov di,offset _CommandEnvLength
  416.          call Konvert_AX_To_Dezstring
  417.          pop ax
  418.          mov di,offset _CommandEnvFree
  419.          call Konvert_AX_To_Dezstring
  420.          pop ax
  421.          mov di,offset _CommandEnvUsed
  422.          call Konvert_AX_To_Dezstring
  423. l1:
  424.                               ; Statistik ausgeben
  425.          WRITE_STRING _commandEnvMSG
  426.  
  427.          call ShowEntrys      ; Einträge ausgeben
  428.  
  429.          call ShowCOMSPEC     ; Ausgabe des Inhaltes von COMSPEC in diesem
  430.                               ; Environment
  431. l9:
  432.          ret
  433.  
  434. ; ----------------------------
  435. ; ShowComspec
  436. ;
  437. ; Funktion: Ausgabe des Inhaltes von COMSPEC im akt. Environment
  438. ;
  439. ShowComspec:
  440.          WRITE_STRING _ComspecMSG
  441.  
  442.          mov si,offset _Comspec
  443.          mov di,offset _ComspecPuffer-1
  444.  
  445.          mov cl,[di]          ; Längenbyte wird nur temporär benötigt
  446.          call SearchEnvStr
  447.          xchg cl,[di]         ; CL = Länge des Inhaltes von COMSPEC
  448.  
  449.          jnc >l1
  450.          or cl,cl
  451.          jnz >l1
  452.                               ; Fehler: Inhalt der Variablen nicht ermittelbar
  453.          WRITE_STRING _ComspecError
  454.          jmp >l9
  455.  
  456. l1:
  457.          mov dx,offset _Comspec+1
  458.          add cl,[_comspec]
  459.          add cl,3
  460.          xor ch,ch           ; CX = Länge des gesamten Eintrages
  461.          mov bx,01h
  462.          mov ah,40h
  463.          int 021h
  464.  
  465.          call ShowCR_LF
  466. l9:
  467.          ret
  468.  
  469. ; ----------------------------
  470. ; ShowEntrys
  471. ;
  472. ; Funktion: Ausgabe aller Einträge des akt. Environemnts
  473. ;
  474. ShowEntrys:
  475.          call EnvCount
  476.          xor ah,ah            ; AX = Anzahl der Einträge
  477.          mov cx,ax            ; CX = Anzahl der Einträge
  478.          mov al,1             ; AX = Nummer des akt. Eintrages
  479. l0:
  480.          push ax,cx
  481.  
  482.          mov di,offset enventry
  483.          call EnvStr          ; Eintrag ermitteln
  484.  
  485.          mov dx,di            ; (= String mit Längenzähler!)
  486.          inc dx
  487.          mov cl,[di]
  488.          xor ch,ch
  489.          mov ah,040h
  490.          mov bx,01h
  491.          int 021h
  492.          call ShowCR_LF
  493.          pop cx,ax
  494.          inc ax
  495.          cmp ax,cx
  496.          IF be jmp l0
  497.  
  498.          ret
  499.  
  500.